package com.example.demo8;

import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.util.Duration;
import java.util.ArrayList;
import java.util.List;

public class EquipmentShopScreen {
    private Scene scene;
    private HBox root;                      // 根容器（左右分栏）
    private GridPane equipmentGrid;         // 左侧装备网格
    private VBox detailsBox;                // 右侧详情框
    private Label nameLabel;                // 装备名称
    private Label descLabel;                // 装备描述
    private Label priceLabel;               // 装备价格
    private Label messageLabel;             // 提示框（购买成功/金币不足）
    private Button buyButton;               // 购买按钮
    private List<Equipment> equipmentList;  // 装备数据列表
    private Equipment selectedEquipment;    // 当前选中的装备

    public HBox getRoot() {
        return root;
    }

    public EquipmentShopScreen() {
        initializeEquipmentData();  // 初始化装备数据
        initializeUI();             // 初始化界面
    }

    /**
     * 初始化装备数据（用户后续可添加更多装备）
     */
    private void initializeEquipmentData() {
        equipmentList = new ArrayList<>();
        equipmentList.add(new Equipment("急速之靴", "普通铁剑，攻击力+10", 200, "/Equipment/急速之靴.png"));
        equipmentList.add(new Equipment("斯特拉克的挑战护手", "橡木盾，防御力+8", 150, "/Equipment/斯特拉克的挑战护手.png"));
        equipmentList.add(new Equipment("无尽之刃", "轻便皮靴，移动速度+15%", 250, "/Equipment/无尽之刃.png"));
        equipmentList.add(new Equipment("石像鬼石板甲", "初级法杖，魔法攻击力+12", 300, "/Equipment/石像鬼石板甲.png"));
        equipmentList.add(new Equipment("饮血剑", "每秒恢复1点生命值（持续10秒）", 400, "/Equipment/饮血剑.png"));
        equipmentList.add(new Equipment("鬼索的狂暴之刃", "增加10%暴击率", 500, "/Equipment/鬼索的狂暴之刃.png"));
    }

    /**
     * 初始化界面布局（修改后）
     */
    private void initializeUI() {
        // 1. 根容器（左右分栏，间距40px，内边距20px）
        root = new HBox(40);
        root.setPadding(new Insets(20));
        root.setMinHeight(700); // 适配更大的窗口高度

        // 2. 左侧：装备网格（2行3列，增大图片和间距）
        equipmentGrid = new GridPane();
        equipmentGrid.setHgap(30);  // 列间距（增大为30）
        equipmentGrid.setVgap(30);  // 行间距（增大为30）
        equipmentGrid.setPadding(new Insets(10)); // 内边距

        // 填充装备网格（增大图片尺寸）
        for (int i = 0; i < equipmentList.size(); i++) {
            Equipment equip = equipmentList.get(i);
            ImageView equipImage = new ImageView();
            try {
                Image img = new Image(getClass().getResourceAsStream(equip.getAvatarPath()));
                equipImage.setImage(img);
            } catch (Exception e) {
                System.out.println("图片加载失败: " + equip.getAvatarPath());
                equipImage.setStyle("-fx-background-color: gray;");
            }
            equipImage.setFitWidth(150);  // 图片宽度（增大为150）
            equipImage.setFitHeight(150); // 图片高度（增大为150）
            equipImage.setStyle("-fx-border-color: #ccc; -fx-border-width: 1px; -fx-padding: 5px;");
            equipImage.setUserData(equip);
            // 鼠标 hover 效果
            equipImage.setOnMouseEntered(e -> equipImage.setStyle("-fx-border-color: #666; -fx-border-width: 1px; -fx-padding: 5px;"));
            equipImage.setOnMouseExited(e -> equipImage.setStyle("-fx-border-color: #ccc; -fx-border-width: 1px; -fx-padding: 5px;"));
            // 点击事件
            equipImage.setOnMouseClicked(e -> {
                selectedEquipment = (Equipment) equipImage.getUserData();
                updateEquipmentDetails(selectedEquipment);
            });

            // 计算行列位置（2行3列）
            int row = i / 3;
            int col = i % 3;
            equipmentGrid.add(equipImage, col, row);
        }

        // 3. 右侧：详情区域（缩小宽度，增大组件间距）
        VBox rightContainer = new VBox(30); // 组件间距（增大为30）
        rightContainer.setPrefWidth(350);   // 右侧宽度（缩小为350）

        // 3.1 详情框（固定高度，增大内边距）
        detailsBox = new VBox(10);
        detailsBox.setPadding(new Insets(20)); // 内边距（增大为20）
        detailsBox.setStyle("-fx-border-color: #ccc; -fx-border-width: 1px; -fx-background-color: #f8f8f8;");
        detailsBox.setPrefHeight(300); // 固定高度（占满右侧上方区域）

        // 装备名称（保持原样式）
        nameLabel = new Label("请选择装备");
        nameLabel.setFont(Font.font("微软雅黑", FontWeight.BOLD, 18));
        // 装备描述（保持原样式）
        descLabel = new Label("");
        descLabel.setFont(Font.font("微软雅黑", 14));
        descLabel.setWrapText(true);
        // 装备价格（保持原样式）
        priceLabel = new Label("");
        priceLabel.setFont(Font.font("微软雅黑", 14));
        priceLabel.setTextFill(Color.ORANGE);

        detailsBox.getChildren().addAll(nameLabel, descLabel, priceLabel);

        // 3.2 提示框（添加边框和背景，文字居中）
        HBox messageContainer = new HBox(); // 用于包裹messageLabel的容器
        messageContainer.setAlignment(Pos.CENTER); // 容器内组件居中对齐
        messageContainer.setPrefWidth(rightContainer.getPrefWidth()); // 占满右侧宽度（避免Label过窄）
        messageLabel = new Label();
        messageLabel.setFont(Font.font("微软雅黑", 14));
        messageLabel.setVisible(false);
        messageLabel.setStyle("-fx-border-color: #ccc; -fx-border-width: 1px; -fx-padding: 10px; -fx-background-color: #fff;"); //
        messageContainer.getChildren().add(messageLabel); // 将Label添加到容器中
        // 3.3 购买按钮（占满右侧宽度，增大 padding）
        buyButton = new Button("购买");
        buyButton.setFont(Font.font("微软雅黑", FontWeight.BOLD, 18)); // 字体增大为18
        buyButton.setStyle("-fx-background-color: #4CAF50; -fx-text-fill: white; -fx-padding: 15px 0; -fx-cursor: hand;"); // 增大垂直 padding
        buyButton.setPrefWidth(rightContainer.getPrefWidth()); // 占满右侧宽度
        buyButton.setDisable(true); // 默认禁用

        // 购买按钮点击事件（保持原逻辑）
        buyButton.setOnAction(e -> {
            if (selectedEquipment == null) return;
            if (true) { // 模拟购买成功
                showMessage("购买成功！", Color.GREEN);
            } else { // 金币不足
                showMessage("金币不足！", Color.RED);
            }
        });

        // 将右侧组件添加到容器
        rightContainer.getChildren().addAll(detailsBox, messageContainer, buyButton);

        // 4. 将左右组件添加到根容器
        root.getChildren().addAll(equipmentGrid, rightContainer);

        // 5. 创建场景（增大窗口尺寸）
        scene = new Scene(root, 1200, 800); // 窗口大小（增大为1200x800）
    }

    /**
     * 更新选中装备的详情（保持原逻辑）
     */
    private void updateEquipmentDetails(Equipment equip) {
        nameLabel.setText(equip.getName());
        descLabel.setText(equip.getDescription());
        priceLabel.setText("价格：" + equip.getPrice() + " 金币");
        buyButton.setDisable(false);
    }

    /**
     * 显示提示信息（保持原逻辑）
     */
    private void showMessage(String text, Color color) {
        messageLabel.setText(text);
        messageLabel.setTextFill(color);
        messageLabel.setVisible(true);
        Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(2), e -> messageLabel.setVisible(false)));
        timeline.play();
    }

    /**
     * 获取场景（保持原逻辑）
     */
    public Scene getScene() {
        return scene;
    }
}
